home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 10
/
FM Towns Free Software Collection 10.iso
/
ms_dos
/
data
/
awkscrpt
/
life.awk
< prev
next >
Wrap
Text File
|
1995-02-11
|
1KB
|
57 lines
# ライフゲーム By JOUJI
# Usage:jgawk -f life.awk life.dat
BEGIN {
con="/dev/stdin"
err="/dev/stderr"
printf("\x1b[2J") >err
printf("%12s 世代 000\n",ARGV[1])
}
{
print
l=jlength($0)
if(l>xm) xm=l
s[++j]=" "$0
}
# d[i,j]:回りの生の数
# s[y]:今の状態を表す文字列 t[y]:次の状態を表す文字列
END {
xm++
ym=j+1
for(g=1;;g++) {
printf("世代増分('Q'で終了) >\x1b[0K") >err
if(g<gm) print "" >err
else {
getline <con
if(/[Qq]/) exit
if($0>0) gm=g+$0
}
for(y=1;y<ym;y++) {
while( x=jindex(s[y],"●") ) {
sub("●","◎",s[y])
for(i=x-1;i<x+2;i++) for(j=y-1;j<y+2;j++)
d[i,j]++
}
gsub("◎","●",s[y])
}
for(y=1;y<ym;y++) {
t[y]=""
for(x=1;x<=xm;x++) {
if(d[x,y]==3) t[y]=t[y] "●"
else if(d[x,y]==4) t[y]=t[y] jsubstr(s[y],x,1)
else t[y]=t[y] " "
d[x,y]=0
}
}
printf("\x1b[%dA",ym+1) >err
printf("%12s 世代 %03d\n",ARGV[1],g)
for(y=1;y<ym;y++) {
print jsubstr(t[y],2)
s[y]=t[y]
}
}
}